package co.yixiang.modules.shop.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 日期工具类
 *
 * @author liufeidong
 */
public class DateUtil {

    private DateUtil() {
    }

    private static DateUtil dateUtil = null;

    public static synchronized DateUtil getDateUtil() {
        if (dateUtil == null) {
            dateUtil = new DateUtil();
        }

        return dateUtil;
    }

    /**
     * 获取当前日期字符串
     *
     * @param str 自定义格式
     * @return
     */
    public static String getCurrDateStr(String str) {
        Date date = new Date();
        DateFormat format = new SimpleDateFormat(str);
        return format.format(date);
    }

    /**
     * 获取当前短日期字符串（yyyy-MM-dd）
     *
     * @return
     */
    public static String getCurrDateStr() {
        return getCurrDateStr("yyyy-MM-dd");
    }

    /**
     * 获取当前长日期字符串（yyyy-MM-dd HH:mm:ss）
     *
     * @return
     */
    public static String getCurrDateStrLong() {
        return getCurrDateStr("yyyy-MM-dd HH:mm:ss");
    }

    /**
     * 将日期字符串转为Date类型
     *
     * @param dateStr 日期字符串
     * @param str     自定义格式 要与dateStr格式对应
     * @return
     */
    public static Date formatDateByStr(String dateStr, String str) {
        DateFormat format = new SimpleDateFormat(str);
        Date date = null;
        try {
            if (dateStr != null && !"".equals(dateStr)) {
                date = format.parse(dateStr);
            }
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
        return date;
    }

    /**
     * 将短日期字符串转为Date类型
     *
     * @param dateStr 日期字符串（yyyy-MM-dd）
     * @return
     */
    public static Date formatDateByStr(String dateStr) {
        return formatDateByStr(dateStr, "yyyy-MM-dd");
    }

    /**
     * 将长日期字符串转为Date类型
     *
     * @param dateStr 日期字符串（yyyy-MM-dd HH:mm:ss）
     * @return
     */
    public static Date formatDateByStrLong(String dateStr) {
        return formatDateByStr(dateStr, "yyyy-MM-dd HH:mm:ss");
    }

    /**
     * 将Date类型转为日期字符串
     *
     * @param date 日期
     * @param str  自定义格式 要与dateStr格式对应
     * @return
     */
    public static String formatStrByDate(Date date, String str) {
        DateFormat format = new SimpleDateFormat(str);
        String dateStr = "";
        try {
            if (date != null) {
                dateStr = format.format(date);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
        return dateStr;
    }

    /**
     * 将Date类型转为短日期字符串
     *
     * @param date 日期
     * @return
     */
    public static String formatStrByDate(Date date) {
        return formatStrByDate(date, "yyyy-MM-dd");
    }

    /**
     * 将Date类型转为长日期字符串
     *
     * @param date 日期
     * @return
     */
    public static String formatStrByDateLong(Date date) {
        return formatStrByDate(date, "yyyy-MM-dd HH:mm:ss");
    }

    /**
     * 当前时间用yyyymmddHHmmss形式显示
     *
     * @return
     */
    public static String getDateStr() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String str = sdf.format(new Date());
        // str = str.substring(0,10)+"_"+str.substring(11,13)+"h"+str.substring(14,16)+"min"+str.substring(17)+"sec";
        return str;
    }

    /**
     * 获取当前年份
     *
     * @return
     */
    public static String getCurrDateYear() {
        return formatStrByDate(new Date(), "yyyy");
    }

    /**
     * 获取当前月份
     *
     * @return
     */
    public static String getCurrDateMonth() {
        return formatStrByDate(new Date(), "MM");
    }

    /**
     * 获取当前日
     *
     * @return
     */
    public static String getCurrDateDay() {
        return formatStrByDate(new Date(), "dd");
    }

    public static void main(String[] args) {
        //System.out.println(formatDateByStrLong("2016/08/30 12:00:00"));
        System.out.println(getDateStr());
    }
}
